/*
 * 文  件   名: UserInfoManagerImpl.java
 * 版         本: docrepository-server(Anttribe). All rights reserved
 * 描         述: <描述>
 * 修   改  人: zhaoyong
 * 修改时 间: 2014年10月14日
 */
package org.anttribe.docrepository.user.manager.impl;

import org.anttribe.docrepository.common.UnifyException;
import org.anttribe.docrepository.common.errorno.UserErrorNumber;
import org.anttribe.docrepository.user.dao.UserInfoDao;
import org.anttribe.docrepository.user.domain.UserInfo;
import org.anttribe.docrepository.user.manager.UserInfoManager;
import org.anttribe.saturn.common.utils.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author zhaoyong
 * @version 2014年10月14日
 */
public class UserInfoManagerImpl implements UserInfoManager
{
    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(UserInfoManagerImpl.class);
    
    /**
     * userInfoDao
     */
    private UserInfoDao userInfoDao;
    
    @Override
    public UserInfo login(String userAccount, String password)
        throws UnifyException
    {
        if (StringUtils.isEmpty(userAccount) || StringUtils.isEmpty(password))
        {
            // 参数不正确
            throw new UnifyException(UserErrorNumber.USERACCOUNT_OR_PASSWORD_NULL);
        }
        
        // 根据用户账号获取用户
        UserInfo userInfo = userInfoDao.getUserByUserAccount(userAccount);
        if (ObjectUtils.isNullOrNone(userInfo))
        {
            // 用户不存在
            throw new UnifyException(UserErrorNumber.USERINFO_NOT_EXIST);
        }
        
        // 加密密码，与数据库比较 MD5加密
        // TODO:
        String pwdCiphertext = "";
        if (!StringUtils.isEmpty(userInfo.getPassword()) && !pwdCiphertext.equals(userInfo.getPassword()))
        {
            // 用户密码不正确
            throw new UnifyException(UserErrorNumber.USER_PASSWORD_ERROR);
        }
        
        // 加载用户角色、权限等数据
        // TODO:
        
        return userInfo;
    }
    
    public UserInfoDao getUserInfoDao()
    {
        return userInfoDao;
    }
    
    public void setUserInfoDao(UserInfoDao userInfoDao)
    {
        this.userInfoDao = userInfoDao;
    }
}